package log_api

import (
	"github.com/gin-gonic/gin"
	"giv-vue-blog/models"
	"giv-vue-blog/models/res"
	"giv-vue-blog/plugins/log_stash"
	"giv-vue-blog/service/common"
	"giv-vue-blog/utils/jwts"
)

type LogRequest struct {
	models.PageInfo
	Level log_stash.Level `form:"level"`
}

// LogListView 获取日志列表
// @Tags 日志管理
// @Summary 获取日志列表
// @Description 获取日志列表
// @Param level query string false "日志等级"
// @Param pageNum query int false "页码，默认为1"
// @Param pageSize query int false "每页数量，默认为10"
// @Router /api/log_list [get]
// @Produce json
// @Success 200 {object} res.Response
// @Failure 400 {string} json "{"code": 1, "message": "参数错误"}"
// @Failure 401 {string} json "{"code": 3, "message": "未授权访问"}"
// @Failure 500 {string} json "{"code": 2, "message": "服务器内部错误"}"
func (LogApi) LogListView(c *gin.Context) {
	_claims, _ := c.Get("claims")
	claims := _claims.(*jwts.CustomClaims)
	log := log_stash.NewLogByGin(c)
	var cr LogRequest
	err := c.ShouldBindQuery(&cr)
	if err != nil {
		log.Error("参数绑定失败")
		res.FailedWithCode(res.ArgumentError, c)
		return
	}
	//TODO: 增加登录角色判断 如果是管理员账户,则可以查看全部的日志信息
	if claims.Role == 1 {
		// log_stash.LogStashModel{Level: cr.Level}  按照日志等级搜索
		list, count, _ := common.CommonList(log_stash.LogStashModel{Level: cr.Level}, common.Option{
			PageInfo: cr.PageInfo,
			Debug:    true,
			Likes:    []string{"ip", "addr"},
		})
		res.OkWithList(list, count, c)
		return
	}
	//TODO: 增加登录角色判断 如果不是管理员账户,则只能查看登录用户对应的日志信息
	list, count, _ := common.CommonList(log_stash.LogStashModel{Level: cr.Level, UserID: claims.UserID}, common.Option{
		PageInfo: cr.PageInfo,
		Debug:    true,
		Likes:    []string{"ip", "addr"},
	})
	res.OkWithList(list, count, c)
	return
}
